#include "widget.h"
#include "ui_widget.h"

#include<QLabel>
//我们通过代码来构建界面的时候，通常会把构造界面的代码放到 Widget/MainWindow 的构造函数中
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //更推荐在堆上创建
    QLabel* label = new QLabel(this);//传入this，就是给当前这个label对象创建一个 "父对象" --- 对象树的概念

    label->setText("Hello World!");//QString的隐式类型转化（QString的头文件被间接包含了！）
    //delete label;//注释之后，并不会出现内存泄漏
    //label对象会在合适的时候被析构释放~~（虽然没有手动delete，关键的奥秘在于QLabel(this)，我们传入的this）
    //之所以能够将这个对象释放掉，是因为把这个对象挂到了对象树上！

    //初识对象树：
    //前端开发（网页开发）也涉及到类似的对象树 --- DOM 其本质上也是一个树形结构（N叉树），通过树形结构把界面上的各种元素组织起来
    //QT也是类似，也是搞了一个对象树，也是N叉树，把界面上的各种元素组织起来了~
    //那么合适的时候销毁，这个时候就是窗口关闭/销毁的时候
    //我们提前销毁的话，就会出现界面上没有出现想要的效果，我们可以delete试试
    //我们引入对象树就是为了在合适的时机将界面上的信息统一销毁
    //我们使用new的方式就是为了将这个对象的生命周期交给QT的对象树来统一管理
}

Widget::~Widget()
{
    delete ui;
}
